namespace SimpleFactory.SimpleFactory
{
    /*
     * IProduct抽象让客户端程序依赖抽象，于是将变化封闭。以后增加具体类，客户端代码不用动。
     */
    public interface IProduct
    {
    }

    public class ConcreteProductA : IProduct
    {
    }

    public class ConcreteProductB : IProduct
    {
    }

    /*
    ! 本质是对单产品的封装
    ! 客户端没得选，灵活性有限，只是封装了new的过程
    ! 如果有多个产品，那么就需要有多个工厂，这样又增加了系统的复杂性。
    */
    public class Factory
    {
        public IProduct Create()
        {
            return new ConcreteProductA();
        }
    }
}